#3.23
cmake_minimum_required(VERSION 3.23) #要求的最低版本
project(test)  #定义工程的名字
#set(SRC add.cpp sub.cpp multiply.cpp divide.cpp main.cpp)  
#搜索源文件，PROJECT_SOURCE_DIR为执行cmake命令时cmake后面携带的路径，
#其实就是CMakeLists.txt路径
#aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC)  

#file(GLOB(指定目录下搜索)/GLOB_RECURSE（递归搜索指定目录） 变量名 要搜索的文件路径和文件类型)
#搜索源文件  ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp为main.cpp
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) 
file(GLOB KU ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)   #为了构建库
message("===========================")
message(${SRC})

#删除main.cpp,构建库，注意删除的时候要带上路径即${PROJECT_SOURCE_DIR}/src/main.cpp
#list(REMOVE_ITEM SRC ${PROJECT_SOURCE_DIR}/src/main.cpp)  

#指定生成可执行文件app的路径
set(EXECUTABLE_OUTPUT_PATH /home/yangxuan/Desktop/cmake/feiqiantao)  

#包含头文件，${PROJECT_SOURCE_DIR}/include为头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)  

#在终端也可以用cmake .. -DCMAKE_CXX_STANDARD=11
#set(CMAKE_CXX_STANDARD 11)  

 #生成可执行文件app
#add_executable(app ${SRC})

#生成*.cpp的动态库  通常在下面条件
#add_library(calc SHARED ${SRC})  

 #生成*.cpp的静态库
#add_library(calc STATIC ${SRC}) 
#什么时候生成静态库，什么时候生成动态库    
#动态库：通常在下面条件源文件比较多，要求生成的库比较小的情况下；  
#静态库：通常在下面条件源文件比较少，生成的库比较大的情况下

#指定生成库（静态库和动态库都适用）的路径
set(LIBRARY_OUTPUT_PATH /home/book/bb)  
#指定生成静态库的路径
#set(EXECUTABLE_OUTPUT_PATH /home/yangxuan/Desktop/cmake/feiqiantao)  

add_library(calc SHARED ${KU})  
#add_library(calc STATIC ${SRC}) 

set(tmp hello world)       #把hello和world字符串拼接放入tmp 
set(tmp1 ${tmp} ${SRC})  #把tmp的字符串和SRC的字符串拼接为tmp1
message(${tmp})   
message(${tmp1})  #打印  "$"相当于解包
list(APPEND tmp "xxx1" "sss2" ${SRC}) #在tmp的字符串后面追加
message(${tmp})  

# 链接静态库
#link_libraries(calc)
# 包含静态库路径
#link_directories(/home/yangxuan/Desktop/cmake/feiqiantao)

# 包含动态库路径
link_directories(/home/book/bb)
add_executable(app ${SRC})
#链接动态库
target_link_libraries(app calc)  #构建动态库时，这条命令要放在最后


